package com.hsgene.common.util.support;

import java.io.Serializable;

/**
 * 分页参数助手
 * <p>
 * page和size均从1开始计算
 * </p>
 *
 * @author wangbing
 * @version 1.0, 2018/7/18
 */
public class LimitHelper implements Serializable {

    private static final long serialVersionUID = 3756055162579341661L;

    /**
     * 每页最大数量限制
     */
    private final static int MAX_PAGE_SIZE = 200;

    /**
     * 页号
     */
    private int page;

    /**
     * 每页大小
     */
    private int size;

    /**
     * 偏移量
     */
    private int offset;

    public LimitHelper() {
    }

    public LimitHelper(int page, int size) {
        this(page, size, true);
    }

    public LimitHelper(int page, int size, boolean isLimitMaxPageSize) {
        if (page >= 1 && size >= 1) {
            this.page = page;
            this.size = isLimitMaxPageSize && size > MAX_PAGE_SIZE ? MAX_PAGE_SIZE : size;
            this.offset = (page - 1) * this.size;
        } else {
            throw new IllegalArgumentException("分页参数错误! page: " + page + ", size:" + size);
        }
    }

    /**
     * 构建分页助手
     *
     * @param page 页号
     * @param size 每页大小
     * @return 分页助手
     */
    public static LimitHelper create(int page, int size) {
        return new LimitHelper(page, size);
    }

    /**
     * 构建分页助手
     *
     * @param page               页号
     * @param size               每页大小
     * @param isLimitMaxPageSize 是否限制每页大小
     * @return 分页助手
     */
    public static LimitHelper create(int page, int size, boolean isLimitMaxPageSize) {
        return new LimitHelper(page, size, isLimitMaxPageSize);
    }

    public int getPage() {
        return page;
    }

    public int getSize() {
        return size;
    }

    public int getOffset() {
        return offset;
    }

    public void setPage(int page) {
        this.page = page;
    }

    public void setSize(int size) {
        this.size = size;
    }

    public void setOffset(int offset) {
        this.offset = offset;
    }
}
